/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCosteoImportacion;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioFecha;
import pe.com.cotelasa.scp.entidad.CosteoImportacion;

/**
 *
 * @author WINDOWS 7
 */
@SuppressWarnings("unchecked")
@Repository("daoCosteoImportacion")
public class DAOCosteoImportacionImpl extends DaoImpl<CosteoImportacion, Integer> implements IDAOCosteoImportacion, Serializable {
    
    
    @SuppressWarnings("unchecked")
    @Override
    @Transactional
    public Collection<CosteoImportacion> buscarCosteoPorFlitro(CosteoImportacion costeoImportacion, Date fechaInicio, Date fechaFinal) throws DAOException {
        List<CosteoImportacion> listaOrdenCS = new ArrayList<CosteoImportacion>();
        try {
            sessionFactory.getCurrentSession().flush();
            Criteria query = sessionFactory.getCurrentSession().createCriteria(CosteoImportacion.class)
                    .createAlias("idFacturaCompra","f")
                    .addOrder(Order.desc("id"))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.like("codigo", "%"+costeoImportacion.getCodigo()+"%"))
                    .add(Restrictions.like("f.numeroFactura", "%"+costeoImportacion.getIdFacturaCompra().getNumeroFactura()+"%"))
                    .add(Restrictions.eq("idEmpresa", costeoImportacion.getIdEmpresa()));

            if (fechaInicio == null && fechaFinal == null) {
                listaOrdenCS = query.list();
            } else if (fechaInicio != null && fechaFinal != null) {
                listaOrdenCS = query.add(Restrictions.ge("fechaEmision", fechaInicio)).add(Restrictions.le("fechaEmision", fechaFinal)).list();
            } else if (fechaInicio == null) {
                listaOrdenCS = query.add(Restrictions.le("fechaEmision", fechaFinal)).list();
            } else if (fechaFinal == null) {
                listaOrdenCS = query.add(Restrictions.ge("fechaEmision", fechaInicio)).list();
            }

        } catch (Exception e) {
            throw new DAOException(e.getMessage(), e);
        }
        return listaOrdenCS;

    }
    
    
    @Override
    public int buscarCantidadCosteo(CosteoImportacion costeoImportacion) throws DAOException {
        sessionFactory.getCurrentSession().flush();
        Long a = (Long) sessionFactory.getCurrentSession().createCriteria(CosteoImportacion.class)
                .add(Restrictions.eq("idEmpresa", costeoImportacion.getIdEmpresa()))
                .add(Restrictions.eq("estadoRegistro", String.valueOf(ESTADO_REGISTRO.ACTIVO.getValor())))
                .add(Restrictions.le("fechaEmision", UtilitarioFecha.toEndOfYear(UtilitarioFecha.obtenerAnio(costeoImportacion.getFechaEmision()))))
                .add(Restrictions.ge("fechaEmision", UtilitarioFecha.toStartOfYear(UtilitarioFecha.obtenerAnio(costeoImportacion.getFechaEmision()))))
                .setProjection(Projections.rowCount())
                .uniqueResult();

        return a.intValue();
        //.list().get(0);
    }
    
    
}
